package TUILayer;
import ModelLayer.*;
import java.util.Scanner;
import ControlLayer.*;
import java.util.ArrayList;

/**
 * Write a description of class AdminUI here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class AdminUI
{
    private MedarbejderCtr medarbejderctr;
    private KundeCtr kundectr;
    private LagerUI lagerui;

    /**
     * Constructor for objects of class AdminUI
     */
    public AdminUI()
    {
        medarbejderctr = MedarbejderCtr.getInstance();
        kundectr = new KundeCtr(); 
    }

    /**
     * Starter Ui'et
     */
    public void start()
    {
        adminMenu();
    }

    /**
     * Goer det muligt for brugeren at goere et valg
     */
    public void adminMenu()
    {
        boolean exit = false;
        while(!exit)
        {
            int choice = writeAdminMenu();
            if(choice == 1){
                startLagerUi();
            }
            else{
                if(choice == 2){
                    opretMedarbejder();
                }
                else{
                    if(choice == 3){
                        fjernMedarbejder();
                    }
                    else{
                        if(choice == 4){
                            listAlleMedarbejdere();
                        }
                        else{
                            if(choice == 6){
                                opretKunde();
                            }
                            if(choice == 7){
                                fjernKunde();
                            }
                            else{
                                if(choice == 8){
                                    listAlleKunder();
                                }
                                else{
                                    if(choice == 5){
                                        findMedarbejderInformation();
                                    }
                                    else{
                                        if(choice == 9){
                                            findKundeInformation();
                                        }
                                        else{
                                            if(choice == 10){
                                                exit = true;
                                            }
                                            else{
                                                System.out.println("Forkert Kommando");
                                                waitForInput();
                                            }
                                        }
                                    }        
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * Venter paa brugeren trykker enter
     */
    private void waitForInput()
    {
        System.out.println("\nPres Enter For At Fortseatte");
        new Scanner(System.in).nextLine();
    }

    /**
     * Skriver menu'en
     */
    private int writeAdminMenu()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\f *** Admin Menu ***");
        System.out.println(" (1) Lager Styring");
        System.out.println("");
        System.out.println(" *** Medarbejdere ***");
        System.out.println(" (2) Opret Medarbejder");
        System.out.println(" (3) Fjern Medarbejder");
        System.out.println(" (4) List Alle Medarbejdere");
        System.out.println(" (5) Find Medarbejder Information");
        System.out.println("");
        System.out.println(" *** Kunder ***");
        System.out.println(" (6) Opret Kunde");
        System.out.println(" (7) Fjern Kunde");
        System.out.println(" (8) List Alle Kunder");
        System.out.println(" (9) Find Kunde Information");
        System.out.println("");
        System.out.println(" (10) Return");
        System.out.print("\n Gør dit valg: ");

        int choice = keyboard.nextInt();
        return choice;

    }

    /**
     * Starter lager Ui'et
     */
    private void startLagerUi()
    {
        lagerui = new LagerUI();
        lagerui.start();
    }

    /**
     * Goer det muligt for brugeren at indtaste Navn
     */
    private String inputNavn()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Navn");
        String navn = keyboard.nextLine();
        return navn;
    }

    /**
     * Goer det muligt for brugeren at indtaste Adresse
     */
    private String inputAdresse()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Adresse");
        String adresse = keyboard.nextLine();
        return adresse;
    }

    /**
     * Goer det muligt for brugeren at indtaste By
     */
    private String inputBy()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast By");
        String by = keyboard.nextLine();
        return by;
    }

    /**
     * Goer det muligt for brugeren at indtaste Telefon Nr
     */
    private int inputTelefonNr()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Telefon Nummer");
        int tele = keyboard.nextInt();
        return tele;
    }

    /**
     * Goer det muligt for brugeren at indtaste Afdeling
     */
    private String inputAfdeling()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Afdeling");
        String afdeling = keyboard.nextLine();
        return afdeling;
    }

    /**
     * Goer det muligt for brugeren at indtaste Medarbejder ID
     */
    private int inputMedarbejderID()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Medarbejderens ID");
        int id = keyboard.nextInt();
        return id;
    }

    /**
     * Goer det muligt for brugeren at indtaste kunde rabat
     */
    private int inputRabat()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Kundes Rabat I %");
        int rabat = keyboard.nextInt();
        return rabat;
    }

    /**
     * Goer det muligt for brugeren at indtaste kunde id
     */
    private int inputKundeId()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Kundes ID (Telefon Nummer)");
        int kid = keyboard.nextInt();
        return kid;
    }

    /**
     * Goer det muligt for brugeren at indtaste kunde type
     */
    private String inputKundeType()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Intast Kundetype (Privat / Erhverv)");
        String ktype = keyboard.nextLine();
        return ktype;
    }

    /**
     * Goer det muligt for brugeren at oprette en medarbejder
     */
    private void opretMedarbejder()
    {
        String navn = inputNavn();

        while (navn.length() < 2) {
            System.out.println("Ikke gyldigt navn");
            navn = inputNavn();
        }

        String adresse = inputAdresse();

        while (adresse.length() < 3) {
            System.out.println("Ikke gyldig adresse");
            adresse = inputAdresse();
        }

        String by = inputBy();

        while (by.length() < 2) {
            System.out.println("Ikke gyldig by");
            by = inputBy();
        }

        int telefonNr = inputTelefonNr();
        String afdeling = inputAfdeling();

        while (afdeling.length() < 3) {
            System.out.println("Ikke gyldig afdeling");
            afdeling = inputAfdeling();
        }

        int medarbejderId = inputMedarbejderID();

        medarbejderctr.opretMedarbejder(navn, adresse, by, telefonNr, afdeling, medarbejderId);

        System.out.println("Medarbejder Oprettet");

        waitForInput();
    }

    /**
     * Goer det muligt for brugeren at fjerne en medarbejder
     */
    private void fjernMedarbejder()
    {
        int medarbejderId = inputMedarbejderID();
        Medarbejder medarbejder = medarbejderctr.findMedarbejder(medarbejderId);

        if(medarbejder != null){
            medarbejderctr.fjernMedarbejder(medarbejderId);
        }else{
            System.out.println("Ingen Medarbejder Med Dette ID");
            waitForInput();
        }

    }

    /**
     * Goer det muligt for brugeren at list alle medarbejdere
     */
    private void listAlleMedarbejdere()
    {
        for(Medarbejder medarbejder : medarbejderctr.listAlleMedarbejdere())
            System.out.println("Navn: " + medarbejder.getMedarbejdernavn() + " - ID: " + medarbejder.getMedarbejderId());
        waitForInput();
    }

    /**
     * Goer det muligt for brugeren at oprette en kunde
     */
    private void opretKunde()
    {
        String navn = inputNavn();

        while (navn.length() < 2) {
            System.out.println("Ikke gyldigt navn");
            navn = inputNavn();
        }

        String adresse = inputAdresse();

        while (adresse.length() < 3) {
            System.out.println("Ikke gyldig adresse");
            adresse = inputAdresse();
        }

        String by = inputBy();

        while (by.length() < 2) {
            System.out.println("Ikke gyldig by");
            by = inputBy();
        }

        int telefonNr = inputTelefonNr();

        int rabat = inputRabat();

        int kundeId = inputKundeId();

        String kundeType = inputKundeType();

        while (kundeType.length() < 3) {
            System.out.println("Ikke gyldig kunde type");
            kundeType = inputKundeType();
        }

        kundectr.opretKunde(navn, adresse, by, telefonNr, rabat, kundeId, kundeType);

        System.out.println("Kunde Oprettet");

        waitForInput();
    }

    /**
     * Goer det muligt for brugeren at fjerne en kunde
     */
    void fjernKunde()
    {
        int kundeId = inputKundeId();
        Kunde kunde = kundectr.findKunde(kundeId);

        if(kunde != null){
            kundectr.fjernKunde(kundeId);
        }else{
            System.out.println("Ingen Kunde Med Dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at liste alle kunder
     */
    private void listAlleKunder()
    {
        for(Kunde kunde : kundectr.listAlleKunder())
            System.out.println("Navn: " + kunde.getKundeNavn() + " - ID: " + kunde.getKundeId() + " - Kunde Type: " + kunde.getKundeType());
        waitForInput();
    }

    /**
     * Goer det muligt for brugeren at finde specifik information om en medarbejder
     */
    private void findMedarbejderInformation()
    {
        int medarbejderId = inputMedarbejderID();
        Medarbejder medarbejder = medarbejderctr.findMedarbejder(medarbejderId);

        if(medarbejder != null){
            System.out.println("\fMedarbejder Information:");
            System.out.println("");
            System.out.println("Navn: " + medarbejder.getMedarbejdernavn());
            System.out.println("Adresse: " + medarbejder.getAdresse() + " - By: " + medarbejder.getBy());
            System.out.println("Telefon Nr.: " + medarbejder.getTelefonNr());
            System.out.println("ID: " + medarbejder.getMedarbejderId());
            System.out.println("Afdeling: " + medarbejder.getAfdeling());  

            waitForInput();
        }
        else{
            System.out.println("\fIngen Medarbejder Med Dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at finde specifik information om en kunde
     */
    private void findKundeInformation()
    {
        int kundeId = inputKundeId();
        Kunde kunde = kundectr.findKunde(kundeId);

        if(kunde != null){
            System.out.println("\fKunde Information:");
            System.out.println("");
            System.out.println("Navn: " + kunde.getKundeNavn());
            System.out.println("Adresse: " + kunde.getAdresse() + " - By: " + kunde.getBy());
            System.out.println("Telefon Nr.: " + kunde.getTelefonNr());
            System.out.println("ID: " + kunde.getKundeId());
            System.out.println("Type: " + kunde.getKundeType());
            System.out.println("Rabat: " + kunde.getRabat() + "%");
            waitForInput();
        }
        else{
            System.out.println("\fIngen Kunde Med Dette ID");
            waitForInput();
        }
    }
}

